//class Solution {
//    public int minSubArrayLen(int target, int[] nums) {
//        int i=0,j,n=0,res=nums.length+1;
//        long sum=0L;
//        for (j = 0;  j < nums.length; j++) {
//            sum += nums[j];
//            while (sum >= target){
//                n = j - i + 1;
//                res = res < n ? res : n;
//                sum-=nums[i];
//                i++;
//            }
//        }
//        if(sum < target && (j-i)==nums.length) res = 0;
//        return res;
//    }
//}

//二刷------------！！！！！！！！！！！！！！！！！！
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        /**
         * 初始：滑动窗口左右指针指向第一个元素
         *      当窗口内值小于target时，右指针右移，
         *      当大于target时，左指针右移，同时记录窗口内元素个数（只记录最小值）
         * 当右指针到达数组尾部，且窗口内数值小于target 结束
         *
         */
        int i = 0, j = -1, min = 2147483647, sum = 0;
        while (j < nums.length-1 || sum >= target){
            if (sum >= target) {
                min = (j-i) < min ? (j-i) : min;
                sum = sum-nums[i];
                i++;
            }else {
                j++;
                sum += nums[j];
            }
        }
        if(i == 0) return 0;

        return min+1;

    }
}